function connectTwoGroups(cost: number[][]): number {
    const rightVal: number[] = new Array(cost[0].length).fill(0)
    const rightCount: number[] = new Array(cost[0].length).fill(0)
    const leftVal: number[] = new Array(cost.length).fill(0)
    const leftCount: number[] = new Array(cost.length).fill(0)
    // 获得左右翻转的数组，准备计算右侧成本
    const tsoc: number[][] = new Array(cost[0].length).fill(0).map(() => new Array(cost.length).fill(0))
    // 从左往右按最小成本连接，记录左侧成本与双方连接数
    cost.map((item, index) => {
        leftVal[index] = Math.min(...item)
        leftCount[index] += 1
        rightCount[item.indexOf(leftVal[index])] += 1
        item.map((val,i) => {
            tsoc[i][index] = val
        })
    })
    console.log("leftVal",leftVal)
    console.log("leftCount",leftCount)
    console.log("rightVal",rightVal)
    console.log("rightCount",rightCount)
    // 循环判断右侧是否全部连接
    while(rightCount.indexOf(0) != -1) {
        const rightIndex: number = rightCount.indexOf(0) // 获得此时没有连接的右侧序号
        const valList: number[] = tsoc[rightIndex].map((item,index) => { // 对左侧到右侧此点的成本进行遍历，item是额外成本，index是左侧序号
            // 判断是迁移还是直连，找到左侧对应的右侧有几个连接，比较增加的成本
            // leftVal[index] => 左侧序号的最小值, 左侧的数组 => cost[index], 最小值对应的右侧序号 => cost[index].indexOf(leftVal[index])
            // 如果右侧count大于1，返回额外减原本连接，如果为1，则返回额外 额外 => item ,原本 => leftVal[index]
            return rightCount[cost[index].indexOf(leftVal[index])] > 1 ? item - leftVal[index] : item
        })
        // 找到真正额外的最小值的左侧序号
        const val: number = Math.min(...valList) // 最小增加成本
        const index: number = valList.indexOf(val)
        // 进行新的赋值,判断是迁移还是直连
        if (rightCount.indexOf(cost[index].indexOf(leftVal[index])) > 1) {
            // 迁移，左侧最小值修改，右侧修改两个count
            leftVal[index] = tsoc[rightIndex][index]
            rightCount[cost[index].indexOf(leftVal[index])]--
            rightCount[rightIndex]++
        } else {
            // 直连，右侧最小值修改，左右count加一
            rightVal[rightIndex] = tsoc[rightIndex][index]
            rightCount[rightIndex]++
            leftCount[index]++
        }
        
    }
    console.log(tsoc)
    console.log("leftVal",leftVal)
    console.log("leftCount",leftCount)
    console.log("rightVal",rightVal)
    console.log("rightCount",rightCount)
    return rightVal.reduce((sum,item) => sum += item) + leftVal.reduce((sum,item) => sum += item)
};
const cost = [[93,56,92],[53,44,18],[86,44,69],[54,60,30]]
console.log(connectTwoGroups(cost))